1000 constant DELAY
create alien hex
3844 , 0F1D , 3F6F , 2909 ,
081C , 0000 , 0000 , 0000 ,
1C22 , F0B8 , FCF6 , 9490 ,
1038 , 0000 , 0000 , 0000 ,

: udgs ( -- )
  data 4 071F 3F7F 7EF8 E0C0 100 dchar
  data 4 C0C0 0040 0000 0000 101 dchar
  data 4 E0F8 FCB4 0200 0000 102 dchar
  data 4 0000 0000 0000 0000 103 dchar
  data 4 0800 0000 0107 1F3F 104 dchar
  data 4 3E34 E030 7030 1000 105 dchar
  data 4 1000 004A FCFF CFC5 106 dchar
  data 4 0100 0000 0000 0000 107 dchar
  data 4 0000 0000 0000 0000 108 dchar
  data 4 010B 1F0F 0F0F 0F0F 109 dchar
  data 4 0000 0000 0000 303A 10A dchar
  data 4 FEFF FFFE FEFC F8F0 10B dchar
;

decimal
0 value row
0 value i*21+4
0 value index
: sprites ( index -- )
  dup 8 < if
    to index
    index 21 * 4 + to i*21+4
    220 rnd to row
    0 index 3 * +  i*21+4 row 0 15 sprite
    1 index 3 * +  i*21+4 row 4  4 sprite
    2 index 3 * +  i*21+4 row 8  5 sprite
  else drop then
; 

: aliens ( -- )
  12 0 do
    0 i 2* gotoxy   
    s" (*(*(*(*(*(*(*(*(*(*(*(*(*(*(*(*" type
    s" )+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+" type
    i sprites
  loop ;
  
: shift-alien ( -- )
  alien 16 ascii ( dchar
  [ alien 15 + ] literal c@  
  alien [ alien 1+ ] literal 15 cmove>
  alien c!
  [ alien 31 + ] literal c@
  [ alien 16 + ] literal [ alien 17 + ] literal 15 cmove>
  [ alien 16 + ] literal c!
;

hex
CODE: VSYNC                                                   
C2CC 04C1 D020 8802 04CC 1F02 13FE D020 8802 0240 2000 0644   
C500 C30B ;CODE 
decimal

: go ( -- )
  1 gmode   1 screen   2 magnify
  5 6 0 color   6 15 0 color
  udgs  aliens
  500 0 do
    VSYNC drop shift-alien
  loop
;